[Ansible]Playbookの実行にAnsible Runnerを利用
- t_o_dと申します。
- ansibleを利用してplaybookに記載されたタスクを実行する際に
ansible-playbook
コマンドを利用していました。 - その後継としてAnsible Runnerというツールが存在するそうです。
- そこで今回はAnsible Runnerを利用してターゲットサーバーにタスクを実行する方法を記録いたします。
概要
- Ansible RunnerとはPythonライブラリとして提供されているAnsible実行ツールです。
ansible-playbook
と比較して便利な点は主に以下です。- 実行ログの出力及び保存
- 通常のログからジョブ履歴等のファイルが作成。
- フォアグラウンドまたはバックグラウンドでの実行
- オプションでどちらか選択可能。
- ディレクトリ構造に沿った実行
- 指定のディレクトリ構造で読み取る。
- 実行ログの出力及び保存
環境
- mac OS Monterey 12.2
- Docker version 20.10.14
手順
インストール
- 以下のコマンドでansible-runnerをMacにインストールします。
pip3 install ansible-runner
- ※他のインストール方法はこちらを参照してください。
必要ディレクトリ及びファイルの作成
- 任意のディレクトリに以下のコマンドをターミナルで打ち、必要なディレクトリ及びファイルを作成します。
# ディレクトリ作成 mkdir env inventory project # ファイル作成 touch docker-compose.yml env/settings inventory/hosts project/test.yml
- 作成後のフォルダ構造は以下です。
. ├── docker-compose.yml ├── env │ └── settings ├── inventory │ └── hosts └── project └── test.yml
ターゲットサーバーの準備
- お試しなのでターゲット(操作対象)のサーバーをコンテナとして用意します。
- まず作成した
docker-compose.yml
の中身を以下とします。
version: '3.7' services: sample01: image: rockylinux/rockylinux container_name: sample01 restart: always tty: true sample02: image: rockylinux/rockylinux container_name: sample02 restart: always tty: true
- 次に以下のコマンドをターミナルで打ち、必要なコンテナを起動します。
# コンテナをバックグラウンドで起動 docker compose up -d # 起動確認 docker ps
- ターゲットサーバーとして2台起動したため、以下のコマンドでコンテナ内に入れるか確認します。
# sample01に入る。exitで抜けられる。 docker compose exec sample01 bash # sample02に入る。exitで抜けられる。 docker compose exec sample02 bash
インベントリファイルの記述
- 実行に必要なインベントリファイルはinventoryディレクトリに配置します。
- 作成した
inventory/hosts
の中身を以下とします。
[sample_servers] sample01 sample02
runnner設定ファイルの記述
- 実行に必要な設定ファイルはenvディレクトリの中に配置します。
- 作成した
env/settings
の中身を以下とします。- job_timeout : 最大実行時間。超えると実行終了。
- 他の設定はこちらを参照
--- job_timeout: 600
Playbookファイルの記述
- 実行に必要なPlaybookファイルはprojectディレクトリの中に配置します。
- 作成した
project/test.yml
の中身を以下とします。- タスクとして「フォルダ作成」「パッケージインストール」を設定しています。
--- - hosts: sample_servers connection: docker tasks: - name: crate folder file: path: ~/work state: directory mode: 0755 - name: install package yum: name: [git,jq] state: present
Playbook実行
- ここまでで必要な環境及びファイルは整ったので、以下のコマンドを打ち、Playbookのタスクを実行します。
- project/test.ymlと指定せずとも自動でproject内のPlaybookを読み込みます。
ansible-runner run . -p test.yml
確認
- エラー出力なく実行できていたら以下のコマンドを打ち、実行ログファイルが作成されているか確認します。
- stdoutやstatus等のファイルがあります。
ls ~/artifacts
- また以下のコマンドを打ち、タスクが実行されているか確認します。
# コンテナ内に入る。sample02でも確認する docker compose exec sample01 bash # フォルダ確認 ls ~/work # パッケージ確認 git --version jq -V
- 問題なく確認できていたら完了です。
まとめ
- 抽象化されているので非常に管理しやすいように感じました。
- またログ出力機能もあり、証跡や調査等に捗ると感じました。
参考
アノテーション株式会社について
アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。